package net.suplementos.servico;

import java.util.Date;
import java.util.List;

import javax.ejb.Remote;

import net.suplementos.exception.CampoObrigatorioException;
import net.suplementos.exception.RegistroInexistenteException;
import net.suplementos.pojo.Atendimento;
import net.suplementos.pojo.Cliente;
import net.suplementos.pojo.Despesa;
import net.suplementos.pojo.FormaPagamento;
import net.suplementos.pojo.Produto;
import net.suplementos.pojo.ProdutoAtendimento;
import net.suplementos.pojo.Usuario;
import net.suplementos.pojo.Venda;
import net.suplementos.vo.MovimentoCaixaVO;

@Remote
public interface FinanceiroServico {

	List<Despesa> consultarDepesas(String nome, String descricao, Date dataInicioPg, Date dataFimPg, Date dataInicioVen, Date dataFimVen) throws CampoObrigatorioException;

	Despesa getDespesa(Integer id);
	
	Atendimento getAtendimento(Integer id);

	void alterar(Despesa despesa) throws CampoObrigatorioException, RegistroInexistenteException;

	void salvar(Despesa despesa) throws CampoObrigatorioException;

	List<MovimentoCaixaVO> movimentoDia();

	List<Venda> listarSolicitacoesDescontoPendentes();

	List<Atendimento> listarAtendimentosRealizados();
	
	List<ProdutoAtendimento> consultarListaProdutoAtendimento(Atendimento atendimento);

	List<Venda> consultarVendasRealizadas(Date dataInicio, Date dataFim) throws CampoObrigatorioException;

	void estornarVenda(Venda venda) throws CampoObrigatorioException, RegistroInexistenteException;

	void permitirDesconto(Venda venda, boolean permitirDesconto) throws CampoObrigatorioException, RegistroInexistenteException;

	Venda getVenda(Integer id);

	Atendimento iniciarAtendimento(Usuario vendedor, Cliente cliente, String identificador) throws CampoObrigatorioException;

	void finalizarAtendimento();

	void cancelarAtendimento();

	Venda iniciarVenda(Atendimento atendimento) throws RegistroInexistenteException;

	void finalizarVenda(Venda venda);

	void cancelarVenda(Venda venda);

	void solicitarDesconto(Venda venda);

	void adicionarProdutoAtendimento(Produto produto, Atendimento atendimento, Short quantidade) 
		throws CampoObrigatorioException, RegistroInexistenteException;

	void adicionarFormaPagamentoVenda(FormaPagamento formaPagamento, Venda venda, float valor) 
		throws CampoObrigatorioException, RegistroInexistenteException;

	void excluirFormaPagamentoVenda(FormaPagamento formaPagamento, Venda venda)
		throws RegistroInexistenteException;

	void excluirProdutoAtendimento(Produto produto, Atendimento atendimento) throws RegistroInexistenteException;

	void alterarQtdProdutoAtendimento(Produto produto, Atendimento atendimento, short quantidade) 
		throws CampoObrigatorioException, RegistroInexistenteException;

	void indicarClienteAtendimento(Atendimento atendimento, Cliente cliente) throws RegistroInexistenteException;
}
